From: Jasper St. Pierre Date: Sat, 20 Sep 2014 00:44:45 +0000 (-0600) Subject: keyboard: Make sure to destroy the key's BoxPointer X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~2074 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=9d933356e171a1dc49b61b5864826531c0f24d97;p=gnome-shell.git keyboard: Make sure to destroy the key's BoxPointer When the keyboard is destroyed, we destroy the keyboard actor, but the keyboard's menu isn't part of the key itself, so it's never tracked. The menus are actually tracked actors, so they slow down the layout manager's code to rebuild regions and other things. Keeping this list small is a good idea. To prevent leaking menus, destroy the menu when the key is destroyed. https://bugzilla.gnome.org/show_bug.cgi?id=736999 --- diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index d2a8dd59c..b3de70b9a 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -75,6 +75,7 @@ const Key = new Lang.Class({ _init : function(key) { this._key = key; this.actor = this._makeKey(key, GLib.markup_escape_text(key.label, -1)); + this.actor.connect('destroy', Lang.bind(this, this._onDestroy)); this._extended_keys = this._key.get_extended_keys(); this._extended_keyboard = null; @@ -97,6 +98,13 @@ const Key = new Lang.Class({ } }, + _onDestroy: function() { + if (this._boxPointer) { + this._boxPointer.actor.destroy(); + this._boxPointer = null; + } + }, + _makeKey: function (key, label) { let button = new St.Button ({ label: label, style_class: 'keyboard-key' });